﻿using BoilerplateWPF.Models;
using BoilerplateWPF.ViewModels;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace BoilerplateWPF.Views
{
    /// <summary>
    /// ShellView.xaml 的交互逻辑
    /// </summary>
    public partial class ShellView : Window
    {
        // 对于简单的小功能，确实不需要强求MVVM，直接在View的后端写是更好的选择
        // 适合在View后端直接实现的情况：
        // 1 UI交互逻辑：比如您的拖动页面功能
        // 2 简单的视觉效果：动画、过渡效果
        // 3 控件事件处理：点击、悬停等纯UI交互
        // 4 简单的计时器：比如显示当前时间
        // 5 布局相关的逻辑：控件位置、尺寸调整
        private DispatcherTimer _timer; // 计时器 显示当前时间

        public ShellView(UserModel user)
        {
            this.DataContext = new ShellViewModel(user); // 设置上下文 接收Login传过来的 当前用户信息

            InitializeComponent();

            InitializeTimer(); // 初始化计时器

        }

        /// <summary>
        /// 初始化计时器
        /// </summary>
        private void InitializeTimer()
        {
            _timer = new DispatcherTimer();
            _timer.Interval = TimeSpan.FromSeconds(1); // 每秒更新一次
            _timer.Tick += Timer_Tick;
            _timer.Start();

            // 立即显示一次时间
            UpdateTime();
        }

        private void Timer_Tick(object? sender, EventArgs e)
        {
            UpdateTime();
        }

        private void UpdateTime()
        {
            timeTextBlock.Text = DateTime.Now.ToString("HH:mm:ss");
        }

        // 窗口关闭时停止计时器 最好用OnClosing 能取消 确认成功引用 不过我的VM 是直接关闭程序 直接自动清理了 不需要手动清理
        //protected override void OnClosed(EventArgs e)
        //{
        //    _timer?.Stop();
        //    base.OnClosed(e);
        //}

        /// <summary>
        /// 鼠标按住可拖动 右上标题栏
        /// </summary>
        private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }
    }
}
